package com.wn.date20190806;

/**
 * 声明一个用户管理(UserManager)类， 其中声明一个大小为10的用户数组（users）作为其属性
 * 定义方法add（User）将用户依次增加到users中, 当数组已满时，产生一个新的大小为原数组1.5倍的数组(扩容)，
 * 将原来的用户及新加的用户保存进去， 实际上就产生了一个动态增加容量的数组（ArrayList）
 * 
 * @author song
 *
 */
public class UserManager
{
	private User[] users = new User[10];// 用户数组
	private int userCount = 0;// 记录有效用户数

	/**
	 * 返回实际长度
	 */
	public int size()
	{
		return userCount;
	}
	/**
	 * 定义方法add（User）将用户依次增加到users中, 
	 * 当数组已满时，产生一个新的大小为原数组1.5倍的数组(扩容)，
	 * @param us 用户，数量可变
	 */
	public void add(User... us)
	{
		// 判空
		if(us==null)
		{
			System.out.println("参数错误,添加失败");
			return;
		}
		for(User u:us)
		{
			if(u==null)
			{
				System.out.println("参数错误，添加失败");
				return;
			}
		}
		
		User[] plusUsers=new User[users.length];//临时数组
		// 如果大于用户数组长度扩容
		while((us.length+userCount)>plusUsers.length)
		{
			// 扩容1.5倍
			plusUsers=new User[(int)(plusUsers.length*1.5)];
		}
		// 将users中用户赋值给plus数组
		for(int i=0;i<userCount;i++)
		{
			plusUsers[i]=new User(users[i]);
		}
		
		// 添加
		for(User u:us)
		{
			plusUsers[userCount]=new User(u);
			userCount++;
			
		}
		System.out.println("添加成功");
		// users指向扩容数组
		users=plusUsers;
	}
	
	/**
	 * 查看users
	 */
	public void checkUsers()
	{
		for(int i=0;i<userCount;i++)
		{
			System.out.println("用戶："+users[i].getName()+",性别："+users[i].getGender()+",出生日期："+users[i].getBirthdate());
		}
		System.out.println("输出完毕,共"+userCount+"个用户");
	}
}
